package com.cs.beneficios.web.action;
import com.cs.beneficios.business.entity.BeneficiarioDAO;
import com.cs.beneficios.business.entity.ProgramaDAO;
import com.cs.beneficios.business.entity.SubProgramaDAO;
import com.cs.beneficios.business.model.BeneficiarioVO;
import com.cs.beneficios.business.model.ProgramaVO;
import com.cs.beneficios.business.model.SubProgramaVO;
import com.cs.beneficios.common.ConnectionFactory;
import com.cs.paoyer.administration.business.model.UserVO;
import com.cs.paoyer.administration.exception.AdministrationUserException;
import com.cs.paoyer.administration.util.AccessControl;
import com.cs.paoyer.common.exception.CommonUserException;
import com.cs.paoyer.common.exception.UserException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
//import org.apache.struts.action.ActionError;
//import org.apache.struts.action.ActionErrors;
import java.io.IOException;
import javax.servlet.ServletException;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

public class EliminarBeneficiarioAction extends Action 
{
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @return 
   * @throws java.io.IOException
   * @throws javax.servlet.ServletException
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
    
    
    ActionMessages messages = new ActionMessages();
    try
    {
      	AccessControl access = new AccessControl();
        access.validateAccess(mapping,request,response);
        
        
        //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
		ConnectionFactory cf = new ConnectionFactory();
        HttpSession session = request.getSession();
        String strCodBeneficiarioQuitado =  request.getParameter("code");
        BeneficiarioVO objBeneVO = new BeneficiarioVO(); 
        List beneficiariosList = (List)session.getAttribute("beneficiarios");
        //Para la auditoria de registros
        UserVO user = (UserVO) session.getAttribute("userInfo");
        String terminalAddress = request.getRemoteAddr();
        Calendar c = Calendar.getInstance(); 
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");   
        BeneficiarioDAO objBeneDAO = new BeneficiarioDAO(cf);
        if(beneficiariosList == null || beneficiariosList.size() == 0)
        {
            objBeneVO.setCode(new Long(strCodBeneficiarioQuitado));
            beneficiariosList = (List)objBeneDAO.findBeneficiarioByCriterea(objBeneVO,"eliminar");
        }
        if(beneficiariosList != null && beneficiariosList.size() > 0)
        {
            for(int i = 0;i<beneficiariosList.size();i++)
            {
              objBeneVO = (BeneficiarioVO)beneficiariosList.get(i);
              if(objBeneVO.getCode().toString().equals(strCodBeneficiarioQuitado))
              {
                if(objBeneDAO.eliminarBeneficiario(objBeneVO.getCode(),user.getName(),terminalAddress,dateFormat.format(c.getTime())))
                  beneficiariosList.remove(i);
                
                break;
              }
            }    
            //Collection beneficiarios = beneficiariosList;
            session.removeAttribute("listabene");
            /* if(beneficiarios.size() > 0){
                  session.setAttribute("beneficiarios",beneficiarios);
             }*/
        }else return mapping.getInputForward();
        
        cf.closeConnection(objBeneDAO.getConn());

         
         
            // Mostrar programas y subprogramas
        Object codePrograma =  (Object)request.getParameter("codePrograma");
        Collection programas=null;
        Collection subprogramas=null;
        ProgramaDAO objProgramaDAO;
        ProgramaVO objProgramaVO =  new ProgramaVO();
        SubProgramaDAO objSubProgramaDAO;
        SubProgramaVO objSubProgramaVO =  new SubProgramaVO();
        
        if(codePrograma == null){ 
          request.removeAttribute("programas");
          try
          {
            objProgramaDAO = new ProgramaDAO(cf);
            programas = objProgramaDAO.findProgramaByCriterea(objProgramaVO);
            cf.closeConnection(objProgramaDAO.getConn());
          }catch(SQLException e){
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSUB - cwsub ********/");
          }
          
          if(programas.size() > 0){
            request.setAttribute("programas",programas);
          }else
          {
            //session.setAttribute("msg","No se encontraron programas..");
          }
        }
        
        if(codePrograma != null)
        {
          request.removeAttribute("subprogramas");
          String codpro = (String)codePrograma;
          if(!codpro.equals("nulo"))
          {
            try
            {
              objSubProgramaVO.setCodePrograma(new Long((String)codePrograma));
              objSubProgramaDAO = new SubProgramaDAO(cf);
              subprogramas = objSubProgramaDAO.findSubProgramaByCriterea(objSubProgramaVO);
              cf.closeConnection(objSubProgramaDAO.getConn());
            }catch(SQLException e){
				System.err.println("/******** TDSUB - cwsub");
				e.printStackTrace();
				System.err.println("TDSUB - cwsub ********/");
            }
            //session.removeAttribute("msg");
            if(subprogramas.size() > 0){
              request.setAttribute("subprogramas",subprogramas);
            }else
            {
              //session.setAttribute("msg","No se encontraron subprogramas asociados a este programa..");
            }
          }
        }
    }catch (UserException ue) 
		{
				messages.add("msgWarn",  new ActionMessage("loginForm.message."
																			+ ue.getExceptionVO().getId()));
				saveMessages(request, messages);
      	if(ue.getExceptionVO().getId()==AdministrationUserException.ENDED_SESSION)
        {       
              response.sendRedirect(request.getContextPath()+"/index.jsp");
        }
        else if(ue.getExceptionVO().getId()==CommonUserException.NOT_ALLOWED_RESOURCE)
        {
            response.sendRedirect(request.getContextPath()+"/admin/tile/invalidatedResource.jsp");
        }
        else
        {
            return mapping.getInputForward();
        }
      
    } catch (SQLException e)
    {
		System.err.println("/******** TDSUB - cwsub");
		e.printStackTrace();
		System.err.println("TDSUB - cwsub ********/");
        return mapping.getInputForward();
    }
    

    return mapping.findForward("success");
  }
}